import Monster from "./Monster";
const {ccclass,property} = cc._decorator
/*
第一种方式：不继承cc.Component,不能添加打节点上
第二种方式：继承于cc.Component,必须附加到节点上

脚本的生命周期:
onLoad:脚本实例时被调用
onEnable:每次启用/激活时调用，等同于onEnter
start:脚本启用时调用
update:每一帧都会调用
lateUpdate:晚于更新，在update之后调用
onDisable:每次不启用或者不激活时调用(等同于onExit)
onDestroy:销毁当前脚本时调用
*/
@ccclass
export default class MonsterManager {
    monsterArr:cc.Node[] = []
    private static _instance: MonsterManager = null;
    //构造函数私有化
    private constructor(){}
    //获取单例
    public static getInstance(): MonsterManager {
        if (MonsterManager._instance == null){
            MonsterManager._instance = new MonsterManager();
        } 
        return MonsterManager._instance;
    }
    
    //添加怪物
    public addMonster(monster:cc.Node){
        this.monsterArr.push(monster)
        // console.log("数量：" + this.monsterArr.length)
    }

    //回收怪物
    public collection(monster:cc.Node){
        //查找monster在数组的下标
        const index = this.monsterArr.indexOf(monster)
        //删除从下标开始的1个元素
        this.monsterArr.splice(index, 1)
        // console.log("数量：" + this.monsterArr.length)
    }

    //查找在范围内的距离最近的怪物
    findMinDisMonster(pos:cc.Vec2,range:number):cc.Node{
        let minDisMons:cc.Node = null
        let minDis = Number.MAX_SAFE_INTEGER //表示最小的距离
        this.monsterArr.forEach((item,index)=>{
            //得到pos和item之间的向量差的长度
            const distance = cc.Vec2.distance(pos, item.getPosition())
            if(distance <= range && distance < minDis){
                minDis = distance
                minDisMons = item
            }
        })

        return minDisMons
    }
}